基本的な概念

正確かつ継続的な解析結果を得るためには、ファイルのコンパイル環境に関する詳細な情報をアナライザが利用できるようにする必要があります。

例として、以下にC言語で書かれたコードを示します。

// file.h
#define MACRO 1
unsigned int i
; int foo(void);
// file.c
int foo(void)
    {
    return i = MACRO + CLIMACRO;
    }

このコードは、以下のコマンドを実行してコンパイルされるものとします。

gcc -o file.o -DCLIMACRO=2 -I. file.c

file.cを見ると、同ファイル内では解決されないいくつかの識別子(foo iMACRO CLIMACROなど)があることが分かります。 このことは、静的解析ツールやコンパイラの設計者に、以下のような疑問をもたせます。

  • 識別子が、宣言または使用されているソースファイル内で解決されない場合はどうするべきか。

この問題にどのように対応するかによって、解析結果の精度が決まります。 1次解析コンポーネントは、識別子および言語構造が正しく解決され、安全かつ規格に従う形になると仮定しては実行されません。Perforce QACのパーサは識別子を解決し、解決された値を判断します。

そのため、ソースファイルのコンパイル時にコンパイラが持つ情報を、解析コンポーネントにも与える必要があります。 これには、以下のようなコンパイラ固有の情報が含まれます。

  • コンパイラが持つ言語拡張機能
  • コンパイラのインクルードディレクトリの場所または参照
  • コンパイラが持つ型のサイズの情報

また、以下のようなビルド環境の情報も必要です。

  • 「インクルードファイル」または「参照」を検索するソースファイルをコンパイルするときに使 用する検索パス
  • ソースファイルのコンパイル時に使用される環境変数
  • コンパイル時にコマンドラインでコンパイラへ渡されるマクロ

上述したデータの量は、膨大になります (データはプロジェクトごと、サブプロジェクトごと、ある いはソースファイルごとに異なる場合さえ考えられます)。 しかしながら、Perforce QACには、上述したデータを自動的に抽出する機能が実装されています。

ソースファイルをコンパイルする際に得られる情報は、いくつかの型や識別子に固有のものではなく、ソースファイル全体の解決に固有の情報です。そのため、Perforce QACは、ユーザが単純にソースを指定するだけで一貫した解析結果を得られるツールとしては設計されていません。 解析結果から完全な診断データを得るためには、複雑なセットアッププロセスを正しく完了する必要があります。

Perforce QACプロジェクトの作成では、初めてPerforce QACのプロジェクトを作成する際の手順について説明します。 設定データの抽出 では、使用可能な様々なデータ抽出機能を 紹介します。このセクションで紹介する機能の中から、ご利用の環境に適した機能を選択してく ださい。 プロジェクトの解析では、新規プロジェクトを解析するための様々な方法について説明します。